/***************************************************************************
 *            think.c
 *
 *  Wed Jun 10 18:08:50 2009
 *  Copyright  2009  linux
 *  <fantasy614@gmail.com>
 ****************************************************************************/

/*
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
		 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Library General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor Boston, MA 02110-1301,  USA
 */

#include <stdlib.h>
#include <stdio.h>
#include "think.h"
#include "make_step.h"


#define  DEPTH   4
const int Horse_step[8][2] = {
			{14, 1},
			{18, -1},
			{-14, -1},
			{-18, 1},
			{31, -16},
			{33, -16},
			{-31, 16},
			{-33, 16}
};

const int Advisor_step[4][2] = {
			{15, 1},
			{17, 1},
			{-15, -1},
			{-17, -1}
};

const int Elephant_step[4] = {
		-30, -34, 30, 34
};

const int B_Soldier_step[3] = {
		1, -1, -16
};

const int R_Soldier_step[3] = {
		1, -1, 16
};

const int General_step[4] = {
		1, -1, -16, 16
};

//enum side{RED,BLACK};

const int chessman[256] = {
		-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
		-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
		-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
		-1, -1, -1, 9, 8, 7, 6, 100, 6, 7, 8, 9, -1, -1, -1, -1,
		-1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, -1, -1,
		-1, -1, -1, 0, 5, 0, 0, 0, 0, 0, 5, 0, -1, -1, -1, -1,
		-1, -1, -1, 4, 0, 4, 0, 4, 0, 4, 0, 4, -1, -1, -1, -1,
		-1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, -1, -1,
		-1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, -1, -1,
		-1, -1, -1, 14, 0, 14, 0, 14, 0, 14, 0, 14, -1, -1, -1, -1,
		-1, -1, -1, 0, 15, 0, 0, 0, 0, 0, 15, 0, -1, -1, -1, -1,
		-1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, -1, -1,
		-1, -1, -1, 19, 18, 17, 16, 200, 16, 17, 18, 19, -1, -1, -1, -1,
		-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
		-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
		-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
}

;

// 子力位置价值表
const int chessman_vaule[7][256] = {
			{ // 帅(将)
					0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
					0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
					0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
					0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
					0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
					0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
					0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
					0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
					0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
					0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
					0,  0,  0,  0,  0,  0,  1001,  1001,  1001,  0,  0,  0,  0,  0,  0,  0,
					0,  0,  0,  0,  0,  0,  1002,  1002,  1002,  0,  0,  0,  0,  0,  0,  0,
					0,  0,  0,  0,  0,  0, 1011, 1015,1011,  0,  0,  0,  0,  0,  0,  0,
					0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
					0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
					0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0
			},
			{ // 仕(士)
					0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
					0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
					0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
					0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
					0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
					0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
					0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
					0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
					0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
					0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
					0,  0,  0,  0,  0,  0, 20,  0, 20,  0,  0,  0,  0,  0,  0,  0,
					0,  0,  0,  0,  0,  0,  0, 23,  0,  0,  0,  0,  0,  0,  0,  0,
					0,  0,  0,  0,  0,  0, 20,  0, 20,  0,  0,  0,  0,  0,  0,  0,
					0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
					0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
					0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0
			},
			{ // 相(象)
					0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
					0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
					0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
					0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
					0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
					0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
					0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
					0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
					0,  0,  0,  0,  0, 20,  0,  0,  0, 20,  0,  0,  0,  0,  0,  0,
					0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
					0,  0,  0, 18,  0,  0,  0, 23,  0,  0,  0, 18,  0,  0,  0,  0,
					0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
					0,  0,  0,  0,  0, 20,  0,  0,  0, 20,  0,  0,  0,  0,  0,  0,
					0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
					0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
					0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0
			},
			{ // 马
					0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
					0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
					0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
					0,  0,  0, 90, 90, 90, 96, 90, 96, 90, 90, 90,  0,  0,  0,  0,
					0,  0,  0, 90, 96,103, 97, 94, 97,103, 96, 90,  0,  0,  0,  0,
					0,  0,  0, 92, 98, 99,103, 99,103, 99, 98, 92,  0,  0,  0,  0,
					0,  0,  0, 93,108,100,107,100,107,100,108, 93,  0,  0,  0,  0,
					0,  0,  0, 90,100, 99,103,104,103, 99,100, 90,  0,  0,  0,  0,
					0,  0,  0, 90, 98,101,102,103,102,101, 98, 90,  0,  0,  0,  0,
					0,  0,  0, 92, 94, 98, 95, 98, 95, 98, 94, 92,  0,  0,  0,  0,
					0,  0,  0, 93, 92, 94, 95, 92, 95, 94, 92, 93,  0,  0,  0,  0,
					0,  0,  0, 85, 90, 92, 93, 78, 93, 92, 90, 85,  0,  0,  0,  0,
					0,  0,  0, 88, 85, 90, 88, 90, 88, 90, 85, 88,  0,  0,  0,  0,
					0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
					0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
					0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0
			},
			{ // 车
					0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
					0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
					0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
					0,  0,  0,206,208,207,213,214,213,207,208,206,  0,  0,  0,  0,
					0,  0,  0,206,212,209,216,233,216,209,212,206,  0,  0,  0,  0,
					0,  0,  0,206,208,207,214,216,214,207,208,206,  0,  0,  0,  0,
					0,  0,  0,206,213,213,216,216,216,213,213,206,  0,  0,  0,  0,
					0,  0,  0,208,211,211,214,215,214,211,211,208,  0,  0,  0,  0,
					0,  0,  0,208,212,212,214,215,214,212,212,208,  0,  0,  0,  0,
					0,  0,  0,204,209,204,212,214,212,204,209,204,  0,  0,  0,  0,
					0,  0,  0,198,208,204,212,212,212,204,208,198,  0,  0,  0,  0,
					0,  0,  0,200,208,206,212,200,212,206,208,200,  0,  0,  0,  0,
					0,  0,  0,194,206,204,212,200,212,204,206,194,  0,  0,  0,  0,
					0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
					0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
					0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0
			},
			{ // 兵(卒)
					0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
					0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
					0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
					0,  0,  0,  9,  9,  9, 11, 13, 11,  9,  9,  9,  0,  0,  0,  0,
					0,  0,  0, 19, 24, 34, 42, 44, 42, 34, 24, 19,  0,  0,  0,  0,
					0,  0,  0, 19, 24, 32, 37, 37, 37, 32, 24, 19,  0,  0,  0,  0,
					0,  0,  0, 19, 23, 27, 29, 30, 29, 27, 23, 19,  0,  0,  0,  0,
					0,  0,  0, 14, 18, 20, 27, 29, 27, 20, 18, 14,  0,  0,  0,  0,
					0,  0,  0,  7,  0, 13,  0, 16,  0, 13,  0,  7,  0,  0,  0,  0,
					0,  0,  0,  7,  0,  7,  0, 15,  0,  7,  0,  7,  0,  0,  0,  0,
					0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
					0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
					0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
					0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
					0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
					0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0
			},
			{ // 炮
					0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
					0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
					0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
					0,  0,  0,100,100, 96, 91, 90, 91, 96,100,100,  0,  0,  0,  0,
					0,  0,  0, 98, 98, 96, 92, 89, 92, 96, 98, 98,  0,  0,  0,  0,
					0,  0,  0, 97, 97, 96, 91, 92, 91, 96, 97, 97,  0,  0,  0,  0,
					0,  0,  0, 96, 99, 99, 98,100, 98, 99, 99, 96,  0,  0,  0,  0,
					0,  0,  0, 96, 96, 96, 96,100, 96, 96, 96, 96,  0,  0,  0,  0,
					0,  0,  0, 95, 96, 99, 96,100, 96, 99, 96, 95,  0,  0,  0,  0,
					0,  0,  0, 96, 96, 96, 96, 96, 96, 96, 96, 96,  0,  0,  0,  0,
					0,  0,  0, 97, 96,100, 99,101, 99,100, 96, 97,  0,  0,  0,  0,
					0,  0,  0, 96, 97, 98, 98, 98, 98, 98, 97, 96,  0,  0,  0,  0,
					0,  0,  0, 96, 96, 97, 99, 99, 99, 97, 96, 96,  0,  0,  0,  0,
					0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
					0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
					0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0
			}
};

const int infort[256] = {
		-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
		-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
		-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
		-1, -1, -1,  0,  0,  0,   2,  3,   2,  0,  0,  0, -1, -1, -1, -1,
		-1, -1, -1,  0,  0,  0,   3,  2,   3,  0,  0,  0, -1, -1, -1, -1,
		-1, -1, -1,  0,  0,  0,   2,  3,   2,  0,  0,  0, -1, -1, -1, -1,
		-1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, -1, -1,
		-1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, -1, -1,
		-1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, -1, -1,
		-1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, -1, -1,
		-1, -1, -1, 0, 0, 0, 2, 3, 2, 0, 0, 0, -1, -1, -1, -1,
		-1, -1, -1, 0, 0, 0, 3, 2, 3, 0, 0, 0, -1, -1, -1, -1,
		-1, -1, -1, 0, 0, 0, 2, 3, 2, 0, 0, 0, -1, -1, -1, -1,
		-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
		-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
		-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
}

;

struct move *
get_engine_think ()
{

		struct move *black_move;
		int score=-32700;
		//申请空间
		steps = (struct step *) malloc (sizeof (struct step ));
		p=(struct step *) malloc (sizeof (struct step ));
		steps->firstchild=(struct step *) malloc (sizeof (struct step ));
		steps->nextsibling=(struct step *) malloc (sizeof (struct step ));

//		printf("\nengine:get_engine_think  :\n");
		black_move = (struct move *) malloc (sizeof (struct move));
		make_all_steps (0,steps);
		p->nextsibling=NULL;
		p=steps->firstchild;
		p=p->nextsibling;
//		printf("p->score");
		while(p->nextsibling)
			{
        //printf("  p->score     %d\n",p->score);
					if((p->score)>score)
						{
								score=p->score;
								black_move->src=p->src;
								black_move->des=p->des;
						}
					p=p->nextsibling;
			}
//		printf("\n  return black_move->src  %d\n return black_move->des  %d\n",black_move->src,black_move->des);
		return black_move;
};


int get_vaule(struct step *the_step)
{
		int i;
		int red_score=0;
		int black_score=0;
		int loc;
		int index;
	//	printf("\nengine:get_vaule\n");
		for(i=0;i<16;i++)
			{
					if(the_step->black_side[i].loc!=-1)
						{
								index=the_step->black_side[i].index;
								loc=the_step->black_side[i].loc;
							//	g_print("black_side[k].index %d   black_side[k].loc   %d      score    %d  \n",the_step->black_side[i].index,the_step->black_side[i].loc,chessman_vaule[index-1][254-loc]);
							//	g_print("black_score            %d   \n",black_score);
								black_score+=chessman_vaule[index-1][254-loc];
						}
					if(the_step->red_side[i].loc!=-1)
						{
								index=the_step->red_side[i].index;
								loc=the_step->red_side[i].loc;
								//g_print("red_side[k].index %d   red_side[k].loc    %d      score    %d \n",the_step->red_side[i].index,the_step->red_side[i].loc,chessman_vaule[index-1][loc]);
							//	g_print("red_score              %d \n",red_score);
								red_score+=chessman_vaule[index-1][loc];
						}
			}
    // 	g_print("red_score              %d \n",red_score);
	//	g_print("black_score            %d   \n",black_score);
	//	g_print("return score    %d\n",black_score-red_score);
		return black_score-red_score;
}




bool
check_Soldier (int src, int des)
{

		int check, i;
		check = src - des;

		if (chessman_state[src] > 10)
			{

					if (src < 128)
						{
								if (check == -16)
										return true;
								else
										return false;
						}
					for (i = 0; i < 3; i++)
						{
								if (B_Soldier_step[i] == check)
									{
											return true;

									}
						}
			}
		else
			{
					if (src > 128)
						{
								if (check == 16)
										return true;
								else
										return false;
						}
					for (i = 0; i < 3; i++)
						{
								if (R_Soldier_step[i] == check)
									{
											return true;

									}
						}


			}



		return false;
}

bool
check_Horse (int src, int des)
{
		int check, i;
		check = src - des;

		for (i = 0; i < 8; i++)
			{
					if (Horse_step[i][0] == check)
						{
								src += Horse_step[i][1];

							//	g_print ("\n\n	the src is %d  %d\n", src,
								//         chessman_state[src]);
								if (chessman_state[src])
										return false;
								else
										return true;
						}
			}

		return false;
}



bool
check_Advisor (int src, int des)
{
		int check, i;
		check = src - des;
		for (i = 0; i < 4; i++)
			{
					if (Advisor_step[i][0] == check)
						{
								if (infort[des] == 2)
										return true;
								else
										return false;
						}
			}
		return false;

}


bool
check_General (int src, int des)
{
		int check, i;
		check = src - des;
		for (i = 0; i < 4; i++)
			{
					if (General_step[i] == check)
						{
								if (infort[des] == 2 || infort[des] == 3)
										return true;
								else
										return false;
						}
			}
		return false;
}


bool
check_Elephant (int src, int des)
{
		int check, i;
		check = src - des;
		if (chessman_state[src] < 10)
			{
					if (des < 128)
							return false;
			}
		else if (des > 128)
				return false;

		for (i = 0; i < 4; i++)
			{
					if (Elephant_step[i] == check)
						{
								if (chessman_state[(des + src) / 2] > 0)
										return false;
								else
										return true;
						}
			}
		return false;

};


bool
check_Cannon (int src, int des)
{
		int i;
		int max, min;
		int temp = 0;

		if (chessman_state[des] == 0)
				return check_Chariot (src, des);
		max = (src - des > 0) ? src : des;
		min = (src - des < 0) ? src : des;


		if (!is_same_side (src, des))
			{
					if (src / 16 == des / 16)
						{
								for (i = min + 1; i < max; i++)
										if (chessman_state[i] > 0)
									{
											if (temp == 0)
													temp = 1;
											else
													return false;
									}
								if (temp == 0)
										return false;
								else
										return true;


						}

					if (src % 16 == des % 16)
						{
								for (i = min + 16; i < max; i = i + 16)
										if (chessman_state[i] > 0)
									{
											if (temp == 0)
													temp = 1;
											else
													return false;
									}

								if (temp == 0)
										return false;
								else
										return true;
						}
			}
		return false;
}

;
bool
check_Chariot (int src, int des)
{
		int i;
		int max, min;

		max = (src - des > 0) ? src : des;
		min = (src - des < 0) ? src : des;


		if (src / 16 == des / 16)
			{
					for (i = min + 1; i < max; i++)
							if (chessman_state[i] > 0)
							return false;
					return true;

			}

		if (src % 16 == des % 16)
			{
					for (i = min + 16; i < max; i = i + 16)
							if (chessman_state[i] > 0)
							return false;
					return true;
			}
		return false;
};


bool
is_same_side (int src, int des)
{

		if ((chessman_state[des] > 10    && chessman_state[src] > 10) || (chessman_state[src] > 0
		                                      && chessman_state[src] < 10 && chessman_state[des] >0
		                                      && chessman_state[des] < 10))
				return true;
		else

				return false;
}


